﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Lhxm.Sgs.IDal;
using Lhxm.Sgs.Dal;
using Lhxm.Sgs.Model;
using System.Data.Entity;

namespace Lhxm.Sgs.DalFactory
{
    /// <summary>
    /// 数据会话层：封装所有数据操作类的创建，解耦BLL与DAL,提供一个数据访问的唯一访问点，是一个工厂类
    /// 提供一个方法，完成所有数据的保存（减少连接DB的操作）
    /// </summary>
    public class DBSession : IDBSession
    {
        //weigouEntities dB = new weigouEntities();
        public DbContext dB
        {
            get
            {
                return DBContextFactory.CreateDBContext();
            }
            set
            {

            }
        }

        private IuserAccountDal _userAccountDal;

        public IuserAccountDal userAccountDal
        {
            get
            {
                if (_userAccountDal==null)
                {
                    //_userAccountDal = new userAccountDal();
                    //通过抽象工厂，封装类实例的创建，保证类实例的唯一性
                    _userAccountDal = AbstractFactory.CreateUserAccountDal();
                }
                return _userAccountDal;
            }
            set
            {
                _userAccountDal = value;
            }
        }

        //一个业务中，经常涉及对多张表的操作，我们希望，连接一次数据库，完成对多张表的操作(工作单元模式 )
        public bool SaveChanges()
        {
            return dB.SaveChanges() > 0;
        }
    }
}
